package com.hai.utils;

import com.hai.entity.Menu;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class MenuTreeBuilder {

    public static List<Menu> build(List<Menu> nodes){

        //封装一个方法 通过menus解析菜单树
        //1.定义一个最终的返回结果 这个结果已经解析完了menu 并且存在children
        List<Menu> menuList = new ArrayList<>();
        //2.找到一级菜单
        for (Menu menu : nodes) {
            if (menu.getParentId()==0){
                //将一级菜单添加到menuList
                menuList.add(menu);
            }
        }

        //实现排序
        Collections.sort(menuList,Menu.order());


        //3. 为一级菜单设置子菜单
        for (Menu menu : menuList) {
            //参数1：当前父级的id  参数2：就是所有的菜单列表
            //只有parentId==menu.getId(),才是当前menu的子集
            menu.setChildren(getChild(menu.getId(),nodes));
        }

        return menuList;
    }

    private static List<Menu> getChild(Long id, List<Menu> menus) {
        //定义一个在菜单的集合
        List<Menu> childrenMenu = new ArrayList<>();
        for (Menu menu : menus) {
            //parentId不能等于0
            if (menu.getParentId().equals(id) && menu.getType().equals("0")){
                childrenMenu.add(menu);
            }
        }

        //子菜单中可能还会存在子菜单，所有进行递归操作
        for (Menu menu : childrenMenu) {
            menu.setChildren(getChild(menu.getId(),menus));
        }

        //实现排序
        Collections.sort(childrenMenu,Menu.order());

        //结束
        if (childrenMenu.size()==0){
            return null;
        }

        return childrenMenu;

    }
}
